#ifndef KALMAN_FILTER_H
#define KALMAN_FILTER_H

typedef struct {
    float q;        // 过程噪声协方差
    float r;        // 测量噪声协方差
    float x;        // 估计值
    float p;        // 估计误差协方差
    float k;        // 卡尔曼增益
} KalmanFilter;

/**
 * @brief 初始化卡尔曼滤波器
 * 
 * @param kf 卡尔曼滤波器结构体指针
 * @param q 过程噪声协方差
 * @param r 测量噪声协方差
 * @param initial_value 初始估计值
 * @param initial_error 初始估计误差
 */
void kalman_init(KalmanFilter* kf, float q, float r, float initial_value, float initial_error);

/**
 * @brief 卡尔曼滤波器更新
 * 
 * @param kf 卡尔曼滤波器结构体指针
 * @param measurement 测量值
 * @return float 滤波后的值
 */
float kalman_update(KalmanFilter* kf, float measurement);

#endif // KALMAN_FILTER_H